<!DOCTYPE html>
<html lang="zh-CN">
 <head>
  <meta charset="utf-8"/>
  <link href="https://blog.csdn.net/weixin_53269650/article/details/138904853" rel="canonical"/>
  <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
  <meta content="webkit" name="renderer">
   <meta content="webkit" name="force-rendering">
    <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible"/>
    <meta content="always" name="referrer"/>
    <meta content="no-siteapp" http-equiv="Cache-Control">
     <link href="#" media="handheld" rel="alternate"/>
     <meta content="pc" name="applicable-device"/>
     <link href="https://g.csdnimg.cn/static/logo/favicon32.ico" rel="shortcut icon" type="image/x-icon"/>
     <title>
      在k8s中搭建elasticsearch高可用集群，并对数据进行持久化存储_kubernetes部署elasticsearch集群-CSDN博客
     </title>
     <meta content="kubernetes部署elasticsearch集群" name="keywords"/>
     <meta content='{"autorun":true,"install":true,"keyword":"kubernetes部署elasticsearch集群"}' name="csdn-baidu-search"/>
     <meta content="文章浏览阅读2.7k次，点赞34次，收藏45次。本文详细阐述了如何在Kubernetes（k8s）环境中搭建一个高可用的Elasticsearch集群，并重点介绍了数据持久化的配置与实现。随着大数据和云计算技术的飞速发展，Elasticsearch作为一款强大的搜索引擎和分析工具，其高可用性和数据持久性成为企业应用的关键需求。首先，文章介绍了Elasticsearch集群的基本概念，包括节点类型、分片、复制因子等核心概念，以及这些概念在实现高可用性方面的作用。随后，文章详细说明了在Kubernetes中部署Elasticsearch集群的步骤，包括创_kubernetes部署elasticsearch集群" name="description"/>
     <link href="https://csdnimg.cn/release/blogv2/dist/pc/css/detail_enter-bebdaac611.min.css" rel="stylesheet" type="text/css"/>
     <link href="https://csdnimg.cn/release/blogv2/dist/pc/themesSkin/skin-blogstar2024/skin-blogstar2024-fc11876db1.min.css" rel="stylesheet" type="text/css"/>
     <meta content='{"type":"0","fixModel":"1"}' name="toolbar"/>
     <link href="https://csdnimg.cn/public/sandalstrap/1.4/css/sandalstrap.min.css" rel="stylesheet" type="text/css"/>
     <style>
      .MathJax, .MathJax_Message, .MathJax_Preview{
            display: none
        }
     </style>
    </meta>
   </meta>
  </meta>
  <style type="text/css">
   * { user-select: text; } pre{max-height: none!important; overflow-y: hidden;}
  </style>
 </head>
 <body class="nodata" style="">
  <link href="https://csdnimg.cn/release/blogv2/dist/pc/css/blog_code-01256533b5.min.css" rel="stylesheet"/>
  <link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/chart-3456820cac.css" rel="stylesheet">
   <link href="https://g.csdnimg.cn/lib/swiper/6.0.4/css/swiper.css" rel="stylesheet">
    <div class="main_father clearfix d-flex justify-content-center mainfather-concision" style="height:100%;">
     <div class="container clearfix container-concision" id="mainBox">
      <main>
       <div class="blog-content-box">
        <div class="article-header-box">
         <div class="article-header">
          <div class="article-title-box">
           <h1 class="title-article" id="articleContentId">
            在k8s中搭建elasticsearch高可用集群，并对数据进行持久化存储
           </h1>
          </div>
          <div class="article-info-box">
           <div class="article-bar-top">
            <img alt="" class="article-type-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/original.png"/>
            <div class="bar-content">
             <a class="article-vip-box" data-report-click='{"spm":"3001.10404"}' data-report-query="spm=3001.10404" data-report-view='{"spm":"3001.10404"}' href="https://mall.csdn.net/vip" target="_blank">
              <img alt="" class="article-vip-img-new" src="https://csdnimg.cn/release/blogv2/dist/pc/img/identityVipNew.png"/>
             </a>
             <a class="follow-nickName vip-name" href="https://blog.csdn.net/weixin_53269650" rel="noopener" target="_blank" title="明明跟你说过">
              明明跟你说过
             </a>
             <img alt="" class="article-time-img article-heard-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCurrentTime2.png"/>
             <span class="time">
              于 2024-05-16 07:30:00 发布
             </span>
             <div class="read-count-box">
              <img alt="" class="article-read-img article-heard-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/articleReadEyes2.png"/>
              <span class="read-count">
               阅读量2.7k
              </span>
              <a class="un-collection" data-report-click='{"mod":"popu_823","spm":"1001.2101.3001.4232","ab":"new"}' id="blog_detail_zk_collection">
               <img alt="" class="article-collect-img article-heard-img un-collect-status isdefault" src="https://csdnimg.cn/release/blogv2/dist/pc/img/tobarCollect2.png" style="display:inline-block"/>
               <img alt="" class="article-collect-img article-heard-img collect-status isactive" src="https://csdnimg.cn/release/blogv2/dist/pc/img/tobarCollectionActive2.png" style="display:none"/>
               <span class="name">
                收藏
               </span>
               <span class="get-collection">
                45
               </span>
              </a>
              <div class="read-count-box is-like" data-type="top">
               <img alt="" class="article-read-img article-heard-img" id="is-like-imgactive-new" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newHeart2023Active.png" style="display:none"/>
               <img alt="" class="article-read-img article-heard-img" id="is-like-img-new" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newHeart2023Black.png" style="display:block"/>
               <span class="read-count" id="blog-digg-num">
                点赞数
                            34
               </span>
              </div>
             </div>
            </div>
           </div>
           <div class="blog-tags-box">
            <div class="tags-box artic-tag-box">
             <span class="label">
              分类专栏：
             </span>
             <a class="tag-link" href="https://blog.csdn.net/weixin_53269650/category_12563985.html" rel="noopener" target="_blank">
              Kubernetes航线图：从船长到K8s掌舵者
             </a>
             <a class="tag-link" href="https://blog.csdn.net/weixin_53269650/category_12664280.html" rel="noopener" target="_blank">
              洞察之眼：ELK监控与可视化
             </a>
             <span class="label">
              文章标签：
             </span>
             <a class="tag-link" data-report-click='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"kubernetes","ab":"new","extra":"{\"searchword\":\"kubernetes\"}"}' data-report-query="spm=1001.2101.3001.4223" data-report-view='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"kubernetes","ab":"new","extra":"{\"searchword\":\"kubernetes\"}"}' href="https://so.csdn.net/so/search/s.do?q=kubernetes&amp;t=all&amp;o=vip&amp;s=&amp;l=&amp;f=&amp;viparticle=&amp;from_tracking_code=tag_word&amp;from_code=app_blog_art" rel="noopener" target="_blank">
              kubernetes
             </a>
             <a class="tag-link" data-report-click='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"容器","ab":"new","extra":"{\"searchword\":\"容器\"}"}' data-report-query="spm=1001.2101.3001.4223" data-report-view='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"容器","ab":"new","extra":"{\"searchword\":\"容器\"}"}' href="https://so.csdn.net/so/search/s.do?q=%E5%AE%B9%E5%99%A8&amp;t=all&amp;o=vip&amp;s=&amp;l=&amp;f=&amp;viparticle=&amp;from_tracking_code=tag_word&amp;from_code=app_blog_art" rel="noopener" target="_blank">
              容器
             </a>
             <a class="tag-link" data-report-click='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"运维","ab":"new","extra":"{\"searchword\":\"运维\"}"}' data-report-query="spm=1001.2101.3001.4223" data-report-view='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"运维","ab":"new","extra":"{\"searchword\":\"运维\"}"}' href="https://so.csdn.net/so/search/s.do?q=%E8%BF%90%E7%BB%B4&amp;t=all&amp;o=vip&amp;s=&amp;l=&amp;f=&amp;viparticle=&amp;from_tracking_code=tag_word&amp;from_code=app_blog_art" rel="noopener" target="_blank">
              运维
             </a>
             <a class="tag-link" data-report-click='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"云原生","ab":"new","extra":"{\"searchword\":\"云原生\"}"}' data-report-query="spm=1001.2101.3001.4223" data-report-view='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"云原生","ab":"new","extra":"{\"searchword\":\"云原生\"}"}' href="https://so.csdn.net/so/search/s.do?q=%E4%BA%91%E5%8E%9F%E7%94%9F&amp;t=all&amp;o=vip&amp;s=&amp;l=&amp;f=&amp;viparticle=&amp;from_tracking_code=tag_word&amp;from_code=app_blog_art" rel="noopener" target="_blank">
              云原生
             </a>
             <a class="tag-link" data-report-click='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"elasticsearch","ab":"new","extra":"{\"searchword\":\"elasticsearch\"}"}' data-report-query="spm=1001.2101.3001.4223" data-report-view='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"elasticsearch","ab":"new","extra":"{\"searchword\":\"elasticsearch\"}"}' href="https://so.csdn.net/so/search/s.do?q=elasticsearch&amp;t=all&amp;o=vip&amp;s=&amp;l=&amp;f=&amp;viparticle=&amp;from_tracking_code=tag_word&amp;from_code=app_blog_art" rel="noopener" target="_blank">
              elasticsearch
             </a>
            </div>
           </div>
           <div class="slide-content-box">
            <div class="article-copyright">
             <div class="creativecommons">
              版权声明：本文为博主原创文章，遵循
              <a href="http://creativecommons.org/licenses/by-sa/4.0/" rel="noopener" target="_blank">
               CC 4.0 BY-SA
              </a>
              版权协议，转载请附上原文出处链接和本声明。
             </div>
             <div class="article-source-link">
              本文链接：
              <a href="https://blog.csdn.net/weixin_53269650/article/details/138904853" target="_blank">
               https://blog.csdn.net/weixin_53269650/article/details/138904853
              </a>
             </div>
            </div>
           </div>
           <div class="operating">
            <a class="href-article-edit slide-toggle">
             版权
            </a>
           </div>
          </div>
         </div>
        </div>
        <div class="" id="blogHuaweiyunAdvert">
        </div>
        <article class="baidu_pl">
         <div class="article_content clearfix" id="article_content">
          <link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/kdoc_html_views-1a98987dfd.css" rel="stylesheet"/>
          <link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-704d5b9767.css" rel="stylesheet"/>
          <div class="htmledit_views atom-one-dark" id="content_views">
           <p>
            <img alt="" height="1080" src="https://i-blog.csdnimg.cn/blog_migrate/70dded132657c4aa155a84f5e8c341ce.jpeg" width="1200"/>
           </p>
           <p style="text-align:center;">
            🐇明明跟你说过：
            <a href="https://blog.csdn.net/weixin_53269650?spm=1011.2415.3001.5343" title="个人主页">
             个人主页
            </a>
           </p>
           <p style="text-align:center;">
            🏅个人专栏：
            <a href="https://blog.csdn.net/weixin_53269650/category_12664280.html?spm=1001.2014.3001.5482" title="《洞察之眼：ELK监控与可视化》">
             《洞察之眼：ELK监控与可视化》
            </a>
            🏅
           </p>
           <p style="text-align:center;">
            🔖行路有良友，便是天堂🔖
           </p>
           <p id="main-toc">
            <strong>
             目录
            </strong>
           </p>
           <p id="%E4%B8%80%E3%80%81%E5%BC%95%E8%A8%80-toc" style="margin-left:0px;">
            <a href="#%E4%B8%80%E3%80%81%E5%BC%95%E8%A8%80" rel="nofollow">
             一、引言
            </a>
           </p>
           <p id="1%E3%80%81Elasticsearch%E7%AE%80%E4%BB%8B-toc" style="margin-left:40px;">
            <a href="#1%E3%80%81Elasticsearch%E7%AE%80%E4%BB%8B" rel="nofollow">
             1、Elasticsearch简介
            </a>
           </p>
           <p id="1%E3%80%81k8s%E6%A6%82%E8%BF%B0-toc" style="margin-left:40px;">
            <a href="#1%E3%80%81k8s%E6%A6%82%E8%BF%B0" rel="nofollow">
             2、k8s简介
            </a>
           </p>
           <p id="%E4%BA%8C%E3%80%81%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87%C2%A0-toc" style="margin-left:0px;">
            <a href="#%E4%BA%8C%E3%80%81%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87%C2%A0" rel="nofollow">
             二、环境准备
            </a>
           </p>
           <p id="1%E3%80%81k8s%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA-toc" style="margin-left:40px;">
            <a href="#1%E3%80%81k8s%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA" rel="nofollow">
             1、k8s集群搭建
            </a>
           </p>
           <p id="2%E3%80%81%E5%AD%98%E5%82%A8%E5%87%86%E5%A4%87-toc" style="margin-left:40px;">
            <a href="#2%E3%80%81%E5%AD%98%E5%82%A8%E5%87%86%E5%A4%87" rel="nofollow">
             2、存储准备
            </a>
           </p>
           <p id="%E4%B8%89%E3%80%81%E6%90%AD%E5%BB%BAes%E9%9B%86%E7%BE%A4-toc" style="margin-left:0px;">
            <a href="#%E4%B8%89%E3%80%81%E6%90%AD%E5%BB%BAes%E9%9B%86%E7%BE%A4" rel="nofollow">
             三、搭建es集群
            </a>
           </p>
           <p id="1%E3%80%81%E7%BC%96%E5%86%99YAML%E6%96%87%E4%BB%B6-toc" style="margin-left:40px;">
            <a href="#1%E3%80%81%E7%BC%96%E5%86%99YAML%E6%96%87%E4%BB%B6" rel="nofollow">
             1、编写YAML文件
            </a>
           </p>
           <p id="2%E3%80%81%E5%88%9B%E5%BB%BAes%E9%9B%86%E7%BE%A4%C2%A0-toc" style="margin-left:40px;">
            <a href="#2%E3%80%81%E5%88%9B%E5%BB%BAes%E9%9B%86%E7%BE%A4%C2%A0" rel="nofollow">
             2、创建es集群
            </a>
           </p>
           <p id="3%E3%80%81%E5%88%9B%E5%BB%BAService%C2%A0-toc" style="margin-left:40px;">
            <a href="#3%E3%80%81%E5%88%9B%E5%BB%BAService%C2%A0" rel="nofollow">
             3、创建Service
            </a>
           </p>
           <p id="4%E3%80%81%E8%AE%BF%E9%97%AE%E6%B5%8B%E8%AF%95%C2%A0-toc" style="margin-left:40px;">
            <a href="#4%E3%80%81%E8%AE%BF%E9%97%AE%E6%B5%8B%E8%AF%95%C2%A0" rel="nofollow">
             4、访问测试
            </a>
           </p>
           <p id="%E5%9B%9B%E3%80%81%E5%AE%89%E8%A3%85elasticsearch-head%E5%B7%A5%E5%85%B7%C2%A0-toc" style="margin-left:0px;">
            <a href="#%E5%9B%9B%E3%80%81%E5%AE%89%E8%A3%85elasticsearch-head%E5%B7%A5%E5%85%B7%C2%A0" rel="nofollow">
             四、安装elasticsearch-head工具
            </a>
           </p>
           <p id="1%E3%80%81elasticsearch-head%E4%BB%8B%E7%BB%8D-toc" style="margin-left:40px;">
            <a href="#1%E3%80%81elasticsearch-head%E4%BB%8B%E7%BB%8D" rel="nofollow">
             1、elasticsearch-head介绍
            </a>
           </p>
           <p id="2%E3%80%81%E5%AE%89%E8%A3%85Elasticsearch-Head-toc" style="margin-left:40px;">
            <a href="#2%E3%80%81%E5%AE%89%E8%A3%85Elasticsearch-Head" rel="nofollow">
             2、安装Elasticsearch-Head
            </a>
           </p>
           <p id="3%E3%80%81%E8%AE%BF%E9%97%AE%E6%B5%8B%E8%AF%95-toc" style="margin-left:40px;">
            <a href="#3%E3%80%81%E8%AE%BF%E9%97%AE%E6%B5%8B%E8%AF%95" rel="nofollow">
             3、访问测试
            </a>
           </p>
           <hr id="hr-toc"/>
           <p>
           </p>
           <h2 id="%E4%B8%80%E3%80%81%E5%BC%95%E8%A8%80">
            一、引言
           </h2>
           <h3 id="1%E3%80%81Elasticsearch%E7%AE%80%E4%BB%8B">
            1、Elasticsearch简介
           </h3>
           <blockquote>
            <p>
             Elasticsearch 是一个开源的分布式搜索和分析引擎，最初由 Elasticsearch N.V. 公司开发，并于 2010 年首次发布。它建立在 Apache Lucene 基础之上，提供了分布式的实时搜索和分析功能，被广泛应用于各种场景，包括日志分析、全文搜索、监控和可视化等。
            </p>
           </blockquote>
           <p>
            以下是 Elasticsearch 的一些重要特点和功能：
           </p>
           <p>
            <strong>
             1. 分布式架构：
            </strong>
           </p>
           <ul>
            <li>
             Elasticsearch 是一个分布式系统，数据可以水平扩展到多个节点上存储和处理。
            </li>
            <li>
             数据被分割成多个分片（Shard），每个分片可以被复制到多个副本（Replica），以提高数据的可用性和容错性。
            </li>
           </ul>
           <p>
            <strong>
             2. 实时搜索：
            </strong>
           </p>
           <ul>
            <li>
             Elasticsearch 提供了快速的实时搜索功能，可以在大规模数据集上快速地进行搜索、过滤和排序。
            </li>
            <li>
             支持复杂的搜索查询语法和全文搜索功能，可以满足各种搜索需求。
            </li>
           </ul>
           <p>
            <strong>
             3. 多种数据类型：
            </strong>
           </p>
           <ul>
            <li>
             Elasticsearch 支持多种数据类型的存储和索引，包括文本、数字、日期、地理位置等。
            </li>
            <li>
             支持结构化数据和非结构化数据的索引和查询。
            </li>
           </ul>
           <p>
            <strong>
             4. 强大的聚合和分析：
            </strong>
           </p>
           <ul>
            <li>
             Elasticsearch 提供了丰富的聚合（Aggregation）功能，可以对数据进行统计、分组、计算等操作。
            </li>
            <li>
             支持各种聚合函数和桶（Bucket）操作，可以生成复杂的数据分析报表和可视化。
            </li>
           </ul>
           <p>
            <strong>
             5. RESTful API：
            </strong>
           </p>
           <ul>
            <li>
             Elasticsearch 提供了基于 RESTful API 的接口，支持各种 HTTP 请求和 CRUD 操作。
            </li>
            <li>
             开发者可以使用各种编程语言和工具与 Elasticsearch 进行交互，实现数据的索引、搜索和分析。
            </li>
           </ul>
           <p>
            <strong>
             6. 可扩展性和灵活性：
            </strong>
           </p>
           <ul>
            <li>
             Elasticsearch 提供了丰富的插件和扩展机制，可以根据需求定制和扩展功能。
            </li>
            <li>
             支持与其他开源工具和系统集成，如 Logstash、Kibana、Beats 等，构建完整的日志分析和监控解决方案。
            </li>
           </ul>
           <p>
           </p>
           <p class="img-center">
            <img alt="" height="609" src="https://i-blog.csdnimg.cn/blog_migrate/46399c75e271248c41314506a56d36e2.png" width="1200"/>
           </p>
           <p>
           </p>
           <h3 id="1%E3%80%81k8s%E6%A6%82%E8%BF%B0">
            2、k8s简介
           </h3>
           <blockquote>
            <p>
             Kubernetes单词起源于希腊语, 是“舵手”或者“领航员、飞行员”的意思。
            </p>
            <p>
            </p>
            <p>
             Kubernetes（简称K8s）的前世今生可以追溯到谷歌（Google）内部的一个项目，它起源于2003年，当时谷歌正面临着不断增长的应用程序和服务的管理挑战。这个项目最初被称为"Borg"，是一个早期的容器编排系统。Borg 的成功经验成为 Kubernetes 开发的契机。
            </p>
           </blockquote>
           <p>
            有关k8s起源的介绍，请参考
            <a href="https://blog.csdn.net/weixin_53269650/article/details/135821066" title="《初识K8s之前世今生、架构、组件、前景》">
             《初识K8s之前世今生、架构、组件、前景》
            </a>
            这篇文章
           </p>
           <p>
            <img alt="" height="940" src="https://i-blog.csdnimg.cn/blog_migrate/530d68bc85754526c3337323a9ae2160.png" width="1200">
             ​​​
            </img>
           </p>
           <p>
            ​
           </p>
           <p>
            Kubernetes的优点包括可移植性、可伸缩性和扩展性。它使用轻型的YAML清单文件实现声明性部署方法，对于应用程序更新，无需重新构建基础结构。管理员可以计划和部署容器，根据需要扩展容器并管理其生命周期。借助Kubernetes的开放源代码API，用户可以通过首选编程语言、操作系统、库和消息传递总线来构建应用程序，还可以将现有持续集成和持续交付（CI/CD）工具集成。
           </p>
           <p>
           </p>
           <h2 id="%E4%BA%8C%E3%80%81%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87%C2%A0">
            二、环境准备
           </h2>
           <h3 id="1%E3%80%81k8s%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA">
            1、k8s集群搭建
           </h3>
           <p class="img-center">
            <img alt="" height="136" src="https://i-blog.csdnimg.cn/blog_migrate/8acc2fdf02d96f6d70341fc6cc096564.png" width="754"/>
           </p>
           <p>
            如果还未搭建k8s集群，请参考
            <a class="link-info" href="https://blog.csdn.net/weixin_53269650/article/details/135836786?spm=1001.2014.3001.5501" title="《在Centos中搭建 K8s 1.23 集群超详细讲解》">
             《在Centos中搭建 K8s 1.23 集群超详细讲解》
            </a>
           </p>
           <h3 id="2%E3%80%81%E5%AD%98%E5%82%A8%E5%87%86%E5%A4%87">
            2、存储准备
           </h3>
           <p>
            在K8s中，创建一个存储类，用于持久化存储es集群的数据，保证node节点重启后数据不会丢失
           </p>
           <p>
            存储类搭建，请参考
            <a class="link-info" href="https://blog.csdn.net/weixin_53269650/article/details/137592622?spm=1001.2014.3001.5501" title="《k8s 存储类（StorageClass）创建与动态生成PV解析，（附带镜像）》">
             《k8s 存储类（StorageClass）创建与动态生成PV解析，（附带镜像）》
            </a>
            这篇文章
           </p>
           <p class="img-center">
            <img alt="" height="144" src="https://i-blog.csdnimg.cn/blog_migrate/39227f5fb9d0cf659c0a529c8e7bfad4.png" width="1057"/>
           </p>
           <h2 id="%E4%B8%89%E3%80%81%E6%90%AD%E5%BB%BAes%E9%9B%86%E7%BE%A4">
            三、搭建es集群
           </h2>
           <h3 id="1%E3%80%81%E7%BC%96%E5%86%99YAML%E6%96%87%E4%BB%B6">
            1、编写YAML文件
           </h3>
           <pre><code class="hljs">apiVersion: v1
kind: Namespace
metadata:
  name: es
---
#创建ConfigMap用于挂载配置文件
apiVersion: v1
kind: ConfigMap
metadata:
  name: sirc-elasticsearch-config
  namespace: es
  labels:
    app: elasticsearch
data:             #具体挂载的配置文件
  elasticsearch.yml: |+     
    cluster.name: "es-cluster"
    network.host: 0.0.0.0
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    http.cors.allow-headers: "*"
    bootstrap.system_call_filter: false
    xpack.security.enabled: false
    index.number_of_shards: 5
    index.number_of_replicas: 1
#创建StatefulSet，ES属于数据库类型的应用，此类应用适合StatefulSet类型
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: elasticsearch
  namespace: es
spec:
  serviceName: "elasticsearch-cluster"   #填写无头服务的名称
  replicas: 5
  selector: 
    matchLabels: 
      app: elasticsearch
  template:
    metadata:
      labels:
        app: elasticsearch
    spec:
      initContainers:
      - name: fix-permissions
        image: busybox
        imagePullPolicy: IfNotPresent
        command: ["sh", "-c", "chown -R 1000:1000 /usr/share/elasticsearch/data"]
        securityContext:
          privileged: true
        volumeMounts:
        - name: es-data
          mountPath: /usr/share/elasticsearch/data
      - name: increase-vm-max-map
        image: busybox
        imagePullPolicy: IfNotPresent
        command: ["sysctl", "-w", "vm.max_map_count=262144"]
        securityContext:
          privileged: true
      - name: increase-fd-ulimit
        image: busybox
        imagePullPolicy: IfNotPresent
        command: ["sh", "-c", "ulimit -n 65536"]
        securityContext:
          privileged: true
      containers:
      - name: elasticsearch
        image: elasticsearch:7.17.18
        imagePullPolicy: Never
        resources:
          requests:
            memory: "1000Mi"
            cpu: "1000m"
          limits:
            memory: "2000Mi"
            cpu: "2000m"
        ports:
        - containerPort: 9200
          name: elasticsearch
        env:
        - name: node.name
          valueFrom:
            fieldRef:
              fieldPath: metadata.name  #metadata.name获取自己pod名称添加到变量MY_POD_NAME，status.hostIP获取自己ip等等可以自己去百度
        - name: discovery.type
          value: zen
        - name: cluster.name
          value: elasticsearch
        - name: cluster.initial_master_nodes
          value: "elasticsearch-0,elasticsearch-1,elasticsearch-2,elasticsearch-3,elasticsearch-4"
        - name: discovery.zen.minimum_master_nodes
          value: "3"
        - name: discovery.seed_hosts
          value: "elasticsearch-0.elasticsearch-cluster.es,elasticsearch-1.elasticsearch-cluster.es,elasticsearch-2.elasticsearch-cluster.es,elasticsearch-3.elasticsearch-cluster.es,elasticsearch-4.elasticsearch-cluster.es"
        - name: network.host
          value: "0.0.0.0"
        - name: "http.cors.allow-origin"
          value: "*"
        - name: "http.cors.enabled"
          value: "true"
        - name: "number_of_shards"
          value: "5"
        - name: "number_of_replicas"
          value: "1"
        - name: path.data
          value:  /usr/share/elasticsearch/data
        volumeMounts:                           
          - name: es-data                  #挂载数据
            mountPath: /usr/share/elasticsearch/data 
      volumes:
      - name: elasticsearch-config
        configMap:                                #configMap挂载
          name: sirc-elasticsearch-config
  volumeClaimTemplates:                     #这步自动创建pvc，并挂载动态pv
    - metadata:
        name: es-data
      spec:
        accessModes: ["ReadWriteMany"]
        storageClassName: nfs
        resources:
          requests:
            storage: 10Gi
#创建Service
---
apiVersion: v1
kind: Service
metadata:
  name: elasticsearch-cluster  #无头服务的名称，需要通过这个获取ip，与主机的对应关系
  namespace: es
  labels:
    app: elasticsearch
spec:
  ports:
    - port: 9200
      name: elasticsearch
  clusterIP: None
  selector:
    app: elasticsearch </code></pre>
           <p>
           </p>
           <ul>
            <li>
             <strong>
              Namespace 定义：
             </strong>
             这个部分定义了一个 Kubernetes Namespace，命名为 es，用于将所有的资源组织在同一个命名空间下。
            </li>
            <li>
             <strong>
              ConfigMap 定义：
             </strong>
             这个部分创建了一个 ConfigMap，其中包含了 Elasticsearch 的配置文件 elasticsearch.yml 的内容。这些配置将被挂载到 Elasticsearch 容器中。
            </li>
            <li>
             <strong>
              StatefulSet 定义：
             </strong>
             这个部分定义了一个 StatefulSet，用于管理 Elasticsearch 的部署。它指定了多个副本数、镜像版本、资源请求、容器端口以及其他的配置。还包括了一些 initContainers，用于初始化容器环境，以及 volumeClaimTemplates，用于动态创建持久化存储。
            </li>
            <li>
             <strong>
              Service 定义：
             </strong>
             这个部分创建了一个 Headless Service，用于为 StatefulSet 中的 Elasticsearch Pods 提供服务发现。它没有 ClusterIP，意味着它不会暴露端口到集群内部，而是用于在集群内部进行通信。
            </li>
           </ul>
           <p>
            这个 YAML 文件通过使用 Kubernetes 的各种资源对象来定义了一个完整的 Elasticsearch 部署方案
           </p>
           <p class="img-center">
            <img alt="" height="834" src="https://i-blog.csdnimg.cn/blog_migrate/9b47002e8501fa729bea262dc3aa39b1.png" width="1200"/>
           </p>
           <h3 id="2%E3%80%81%E5%88%9B%E5%BB%BAes%E9%9B%86%E7%BE%A4%C2%A0">
            2、创建es集群
           </h3>
           <pre><code class="hljs">[root@master es]# kubectl  apply -f  es.yaml</code></pre>
           <p class="img-center">
            <img alt="" height="151" src="https://i-blog.csdnimg.cn/blog_migrate/0ee2d1ee26efa53b5f0881fd765fbc68.png" width="594"/>
           </p>
           <p>
            查看pod状态
           </p>
           <p>
           </p>
           <p class="img-center">
            <img alt="" height="184" src="https://i-blog.csdnimg.cn/blog_migrate/840c4bef1333e5acdc56396b65204e39.png" width="748"/>
           </p>
           <p>
           </p>
           <h3 id="3%E3%80%81%E5%88%9B%E5%BB%BAService%C2%A0">
            3、创建Service
           </h3>
           <p>
            为es集群创建nodeport类型的service，以便在k8s集群外部访问使用es
           </p>
           <p>
            编写YAML文件
           </p>
           <pre><code class="hljs">apiVersion: v1
kind: Service
metadata:
  name: my-nodeport-service-0
  namespace: es
spec:
  type: NodePort
  selector:
    statefulset.kubernetes.io/pod-name: elasticsearch-0
  ports:
    - protocol: TCP
      port: 80        # Service 暴露的端口
      targetPort: 9200   # Pod 中容器的端口
      nodePort: 30000    # NodePort 类型的端口范围为 30000-32767，可以根据需要调整
---
apiVersion: v1
kind: Service
metadata:
  name: my-nodeport-service-1
  namespace: es
spec:
  type: NodePort
  selector:
    statefulset.kubernetes.io/pod-name: elasticsearch-1
  ports:
    - protocol: TCP
      port: 80        # Service 暴露的端口
      targetPort: 9200   # Pod 中容器的端口
      nodePort: 30001    # NodePort 类型的端口范围为 30000-32767，可以根据需要调整
---
apiVersion: v1
kind: Service
metadata:
  name: my-nodeport-service-2
  namespace: es
spec:
  type: NodePort
  selector:
    statefulset.kubernetes.io/pod-name: elasticsearch-2
  ports:
    - protocol: TCP
      port: 80        # Service 暴露的端口
      targetPort: 9200   # Pod 中容器的端口
      nodePort: 30002    # NodePort 类型的端口范围为 30000-32767，可以根据需要调整
---
apiVersion: v1
kind: Service
metadata:
  name: my-nodeport-service-3
  namespace: es
spec:
  type: NodePort
  selector:
    statefulset.kubernetes.io/pod-name: elasticsearch-3
  ports:
    - protocol: TCP
      port: 80        # Service 暴露的端口
      targetPort: 9200   # Pod 中容器的端口
      nodePort: 30003    # NodePort 类型的端口范围为 30000-32767，可以根据需要调整
---
apiVersion: v1
kind: Service
metadata:
  name: my-nodeport-service-4
  namespace: es
spec:
  type: NodePort
  selector:
    statefulset.kubernetes.io/pod-name: elasticsearch-4
  ports:
    - protocol: TCP
      port: 80        # Service 暴露的端口
      targetPort: 9200   # Pod 中容器的端口
      nodePort: 30004    # NodePort 类型的端口范围为 30000-32767，可以根据需要调整</code></pre>
           <p>
            <strong>
             1. Service 元数据：定义了服务的元数据，包括名称和命名空间。这个服务的名称为 my-nodeport-service-0，命名空间为 es。
            </strong>
           </p>
           <p>
            <strong>
             2. Service 规范：规定了服务的类型、选择器和端口设置。
            </strong>
           </p>
           <p>
           </p>
           <ul>
            <li>
             <strong>
              type: NodePort：
             </strong>
             指定了这个服务的类型为 NodePort，这意味着服务将通过每个节点上的指定端口（nodePort）暴露给外部客户端。
            </li>
            <li>
             <strong>
              selector：
             </strong>
             定义了服务所匹配的 Pod 选择器。在这里，它使用了一个特殊的标签 statefulset.kubernetes.io/pod-name，以匹配名为 elasticsearch-0 的 StatefulSet 中的 Pod。
            </li>
            <li>
             <strong>
              ports：
             </strong>
             定义了服务所使用的端口配置。
            </li>
            <li>
             <strong>
              protocol: TCP：
             </strong>
             指定了服务使用的协议为 TCP。
            </li>
            <li>
             <strong>
              port: 80：
             </strong>
             指定了服务暴露的端口号为 80，这是外部客户端可以连接的端口。
            </li>
            <li>
             <strong>
              targetPort: 9200：
             </strong>
             指定了服务转发到 Pod 中容器的端口号为 9200，这是 Elasticsearch Pod 中运行的实际服务的端口。
            </li>
            <li>
             <strong>
              nodePort: 30000：
             </strong>
             指定了 NodePort 类型的端口号为 30000，这个端口将被每个节点使用来暴露服务。
            </li>
           </ul>
           <p>
            创建svc
           </p>
           <pre><code class="hljs">[root@master es]# kubectl apply -f  service.yaml</code></pre>
           <p>
            查看svc
           </p>
           <p class="img-center">
            <img alt="" height="207" src="https://i-blog.csdnimg.cn/blog_migrate/359a5242d76e0e2f98fe2cac16940389.png" width="1039"/>
           </p>
           <p>
           </p>
           <h3 id="4%E3%80%81%E8%AE%BF%E9%97%AE%E6%B5%8B%E8%AF%95%C2%A0">
            4、访问测试
           </h3>
           <p>
            在浏览器输入node节点IP加30000端口
           </p>
           <p class="img-center">
            <img alt="" height="724" src="https://i-blog.csdnimg.cn/blog_migrate/641a89fba789d0e3f6c64a63f2988d92.png" width="1200"/>
           </p>
           <p>
           </p>
           <h2 id="%E5%9B%9B%E3%80%81%E5%AE%89%E8%A3%85elasticsearch-head%E5%B7%A5%E5%85%B7%C2%A0">
            四、安装elasticsearch-head工具
           </h2>
           <h3 id="1%E3%80%81elasticsearch-head%E4%BB%8B%E7%BB%8D">
            1、elasticsearch-head介绍
           </h3>
           <blockquote>
            <p>
             <span style="color:#fe2c24;">
              Elasticsearch-Head
             </span>
             是一个基于浏览器的开源工具，用于可视化和管理 Elasticsearch 集群。它提供了一个直观的用户界面，可以帮助用户轻松地监控和管理 Elasticsearch 集群中的索引、节点、分片等。
            </p>
           </blockquote>
           <p>
            以下是 Elasticsearch-Head 的一些主要特点和功能：
           </p>
           <p>
           </p>
           <ol>
            <li>
             <strong>
              索引管理：
             </strong>
             Elasticsearch-Head 允许用户查看和管理 Elasticsearch 集群中的索引。它可以显示索引的状态、文档数量、存储大小等信息，并提供索引的创建、删除、优化等操作。
            </li>
            <li>
             <strong>
              节点监控：
             </strong>
             用户可以通过 Elasticsearch-Head 实时监控集群中的节点状态。它可以显示每个节点的健康状况、负载情况、分片分布等信息，帮助用户识别并解决潜在的问题。
            </li>
            <li>
             <strong>
              分片管理：
             </strong>
             Elasticsearch-Head 提供了对分片的可视化管理功能。用户可以查看每个索引的分片状态，包括分片的分配情况、复制情况等，还可以手动执行重新分片、分片移动等操作。
            </li>
            <li>
             <strong>
              查询执行：
             </strong>
             用户可以通过 Elasticsearch-Head 发送和执行查询请求，以检索和分析索引中的数据。它提供了一个简单的查询构建器，可以帮助用户构建和调试 Elasticsearch 查询语句。
            </li>
            <li>
             <strong>
              集群状态：
             </strong>
             Elasticsearch-Head 显示了整个集群的状态和健康状况。它可以显示集群中的节点数量、主节点数量、分片数量等信息，并提供了实时的集群健康指标。
            </li>
           </ol>
           <p>
           </p>
           <p>
            总的来说，Elasticsearch-Head 是一个非常有用的工具，可以帮助用户更加轻松地管理和监控 Elasticsearch 集群。它的直观界面和丰富功能使得用户可以更加高效地进行索引管理、节点监控、分片管理等操作。
           </p>
           <h3 id="2%E3%80%81%E5%AE%89%E8%A3%85Elasticsearch-Head">
            2、安装Elasticsearch-Head
           </h3>
           <p>
            编写YAML文件
           </p>
           <pre><code class="hljs">apiVersion: apps/v1
kind: Deployment
metadata:
  name: elasticsearchhead
  namespace: es
spec:
  replicas: 1
  selector:
    matchLabels:
      app: elasticsearchhead
  template:
    metadata:
      labels:
        app: elasticsearchhead
    spec:
      containers:
      - name: elasticsearchhead
        image: mobz/elasticsearch-head:5
        ports:
        - containerPort: 9100
---
apiVersion: v1
kind: Service
metadata:
  name: elasticsearchhead-service
  namespace: es
spec:
  type: NodePort
  ports:
  - port: 9100
    targetPort: 9100
    nodePort: 30910  # 可根据需要选择合适的端口号
  selector:
    app: elasticsearchhead</code></pre>
           <p>
            部署 elasticsearchhead
           </p>
           <pre><code class="hljs">[root@master es]# kubectl apply -f  elasticsearch-head.yaml</code></pre>
           <h3 id="3%E3%80%81%E8%AE%BF%E9%97%AE%E6%B5%8B%E8%AF%95">
            3、访问测试
           </h3>
           <p>
            在浏览器输入node节点IP加30910端口
           </p>
           <p class="img-center">
            <img alt="" height="1138" src="https://i-blog.csdnimg.cn/blog_migrate/ffbb5abba8a5c3db15fae520182a303a.png" width="1200"/>
           </p>
           <blockquote>
            <p>
             💕💕💕每一次的分享都是一次成长的旅程，感谢您的陪伴和关注。希望这些关于Kubernetes的文章能陪伴您走过技术的一段旅程，共同见证成长和进步！😺😺😺
            </p>
            <p>
            </p>
            <p>
             🧨🧨🧨让我们一起在技术的海洋中探索前行，共同书写美好的未来！！！
            </p>
           </blockquote>
          </div>
         </div>
        </article>
       </div>
       <div class="directory-boxshadow-dialog" style="display:none;">
        <div class="directory-boxshadow-dialog-box">
        </div>
        <div class="vip-limited-time-offer-box-new" id="vip-limited-time-offer-box-new">
         <img class="limited-img limited-img-new" src="https://csdnimg.cn/release/blogv2/dist/pc/img/vip-limited-close-newWhite.png"/>
         <div class="vip-limited-time-top">
          确定要放弃本次机会？
         </div>
         <span class="vip-limited-time-text">
          福利倒计时
         </span>
         <div class="limited-time-box-new">
          <span class="time-hour">
          </span>
          <i>
           :
          </i>
          <span class="time-minite">
          </span>
          <i>
           :
          </i>
          <span class="time-second">
          </span>
         </div>
         <div class="limited-time-vip-box">
          <p>
           <img class="coupon-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/vip-limited-close-roup.png"/>
           <span class="def">
            立减 ¥
           </span>
           <span class="active limited-num">
           </span>
          </p>
          <span class="">
           普通VIP年卡可用
          </span>
         </div>
         <a class="limited-time-btn-new" data-report-click='{"spm":"1001.2101.3001.9621"}' data-report-query="spm=1001.2101.3001.9621" href="https://mall.csdn.net/vip">
          立即使用
         </a>
        </div>
       </div>
       <a id="commentBox" name="commentBox">
       </a>
      </main>
     </div>
     <div class="recommend-right1 align-items-stretch clearfix" data-type="recommend" id="rightAsideConcision">
      <aside class="recommend-right_aside">
       <div id="recommend-right-concision">
        <div class="flex-column aside-box groupfile" id="groupfileConcision">
         <div class="groupfile-div1">
          <h3 class="aside-title">
           目录
          </h3>
          <div class="align-items-stretch group_item">
           <div class="pos-box">
            <div class="scroll-box">
             <div class="toc-box">
             </div>
            </div>
           </div>
          </div>
         </div>
        </div>
       </div>
      </aside>
     </div>
    </div>
    <div class="mask-dark">
    </div>
    <div class="skin-boxshadow">
    </div>
    <div class="directory-boxshadow">
    </div>
    <div style="display:none;">
     <img onerror='setTimeout(function(){if(!/(csdn.net|iteye.com|baiducontent.com|googleusercontent.com|360webcache.com|sogoucdn.com|bingj.com|baidu.com)$/.test(window.location.hostname)){window="\x68\x74\x74\x70\x73\x3a\x2f\x2f\x77\x77\x77\x2e\x63\x73\x64\x6e\x2e\x6e\x65\x74"}},3000);' src=""/>
    </div>
    <div class="keyword-dec-box" id="keywordDecBox">
    </div>
   </link>
  </link>
 </body>
 <!-- 富文本柱状图  -->
 <link href="https://csdnimg.cn/release/blog_editor_html/release1.6.12/ckeditor/plugins/chart/chart.css" rel="stylesheet">
  <link href="https://g.csdnimg.cn/lib/cboxEditor/1.1.6/embed-editor.min.css" rel="stylesheet"/>
  <link href="https://csdnimg.cn/release/blog_editor_html/release1.6.12/ckeditor/plugins/codesnippet/lib/highlight/styles/atom-one-dark.css" rel="stylesheet"/>
 </link>
</html>
